<?php
import("@.Org.Page"); 
import("@.Org.SystemTool"); 
import("@.Org.SessionTool");

class CommonAction extends Action{	
	
	function _initialize() {
		// 复制语言模版
        $this->assign( "lang",array_change_key_case( L(),CASE_LOWER ) ); 	// array_change_key_case:将数组键值转为小写
        $GLOBALS['_LANG']  	=	array_change_key_case( L(),CASE_LOWER );	// 复制给全局变量      
        		
		/*=== 用户权限检查  === */ 
		if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) {
			import ( 'ORG.Util.RBAC' );			
			if (! RBAC::AccessDecision ()) {				
				//检查认证识别号
				if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) {
					//跳转到认证网关
					redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
				}
				// 没有权限 抛出错误
				if (C ( 'RBAC_ERROR_PAGE' )) {
					// 定义权限错误页面
					redirect ( C ( 'RBAC_ERROR_PAGE' ) );
				} else {
					if (C ( 'GUEST_AUTH_ON' )) {
						$this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );
					}
					// 提示错误信息
					$this->error ( L ( '_VALID_ACCESS_' ) );
				}
			}
		}
		/*=== 用户权限检查   ===*/ 
		// init table variables
		$this->initSystemVariables();
	}

	/**
	 * 初始化数据表储存的系统变量
	 * 
	 */
	public function initSystemVariables(){
		// Table : shop_config
		$res		=	M('ShopConfig')->field("code, value")->where("parent_id > 0")->select();
		$arr 		= 	array();
		foreach ($res AS $row){
            $arr[$row['code']] = $row['value'];
        }
		$GLOBALS['_CFG']	=	$arr;
		// Table : sessions,sessions_data,
		$session 			= 	new SessionTool('sessions', 'sessions_data', 'CL_ECSCP_ID');
		define('SESS_ID', $session->get_session_id());
		// 本地数据库的配置信息保存
		$GLOBALS['ecs']['db_name']	=	C('DB_NAME');
		$GLOBALS['ecs']['prefix']	=	C('DB_PREFIX');
	}
	
	/**
	 * 显示错误信息页面
	 * 
	 */
	public function display_message($msg_detail, $msg_type = 0, $links = array(), $auto_redirect = true){
		if (count($links) == 0){
	        $links[0]['text'] 	= 	L('go_back');
	        $links[0]['href']	= 	'javascript:history.go(-1)';
	    }
	    
	    $this->assign('ur_here',     L('system_message'));
	    $this->assign('msg_detail',  $msg_detail);
	    $this->assign('msg_type',    $msg_type);
	    $this->assign('links',       $links);
	    $this->assign('default_url', $links[0]['href']);
	    $this->assign('auto_redirect', $auto_redirect);
	    	
	    $this->display('message.htm');	
	    exit;
	}
	
	/**
	 +----------------------------------------------------------
	 * 分页函数 支持sql和数据集分页 sql请用 buildSelectSql()函数生成
	 +----------------------------------------------------------
	 * @access public
	 +----------------------------------------------------------
	 * @param array  $result 排好序的数据集或者查询的sql语句
	 * @param int    $totalRows  每页显示记录数 默认21
	 * @param string $listvar    赋给模板遍历的变量名 默认list
	 * @param string $parameter  分页跳转的参数
	 * @param string $target  分页后点链接显示的内容id名
	 * @param string $pagesId  分页后点链接元素外层id名
	 * @param string $template ajaxlist的模板名
	 * @param string $url ajax分页自定义的url
	 +----------------------------------------------------------
	 */
	public function page($param) {
		extract($param);
		//总记录数
		$flag = is_string($result);
		
		$listvar = $listvar ? $listvar : 'list';
		$listRows = $listRows? $listRows : 21;
		if ($flag){
			$totalRows	=	count(M()->query($result));
		}			
		else{
			$totalRows = ($result) ? count($result) : 1;
		}
		//创建分页对象
		if ($target && $pagesId)
			$p = new Page($totalRows, $listRows, $parameter, $url,$target, $pagesId);
		else
			$p = new Page($totalRows, $listRows, $parameter,$url);
		//抽取数据
		if ($flag) {
			$result .= " LIMIT {$p->firstRow},{$p->listRows}";
			$voList = M()->query($result);
		} else {
			$voList = array_slice($result, $p->firstRow, $p->listRows);
		}
		$pages = C('PAGE');//要ajax分页配置PAGE中必须theme带%ajax%，其他字符串替换统一在配置文件中设置，
		
		//可以使用该方法前用C临时改变配置
		foreach ($pages as $key => $value) {
			$p->setConfig($key, $value); // 'theme'=>'%upPage% %linkPage% %downPage% %ajax%'; 要带 %ajax%
		}
		
		//分页显示
		$page = $p->show();	
		//模板赋值
		$this->assign($listvar, $voList);
		$this->assign("page", $page);
		if ($this->isAjax()) {//判断ajax请求
			layout(false);
			$template 	= 	(!$template) ? 'ajaxlist' : $template;
			//exit($this->fetch($template));
			$this->ajaxReturn(1, $this->fetch($template), 1);
		}
		return $voList;
	}
	
	
}
